package com.lin.service;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.lin.entity.R;
import com.lin.entity.dto.UserDTO;
import com.lin.entity.po.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lin.entity.query.UserQuery;
import com.lin.entity.vo.PageVO;
import com.lin.entity.vo.UserVO;


public interface IUserService extends IService<User> {

    /**
     * 注册 --需要将密码加密处理
     * @param userDTO 用户信息
     * @return R
     */
    R register(UserDTO userDTO);

    /**
     * 登录
     * @param userDTO 用户信息
     * @return R --将JWT令牌封装到返回结果中
     */
    R login(UserDTO userDTO);

    /**
     * 先查看Redis中是否存在当前用户信息, 有就直接返回,
     * 否则查询当前用户信息并将查询结果放到Redis中
     * @param username 用户名
     * @return UserVO
     */
    UserVO getCurrentUserInfo(String username) throws JsonProcessingException;

    /**
     * 分页查询用户信息
     * @param userQuery 查询条件
     * @return List<UserVO>
     */
    PageVO<UserVO> listUsers(UserQuery userQuery) throws JsonProcessingException;

    /**
     * 根据id查询用户信息
     * @param id 用户Id
     * @return UserVO
     */
    UserVO getUserById(Integer id) throws JsonProcessingException;

    /**
     * 删除用户--逻辑删除
     * @param id 用户ID
     * @return T/F
     */
    boolean logicRemoveById(Integer id);
}
